 using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Diagnostics;
using MySql.Data.MySqlClient;

namespace AutoStar
{
    public partial class Form1 : Form
    {
        private bool novi_korisnik = false;
        public int drzavaSelect = 0;        
        private Personal person4Change = new Personal();
        private List<Personal> temp= new List<Personal>();
        private Login login;
        private korisnik ulogovanKorisnik;

        public Form1(Login login, korisnik ulogovanKorisnik)
        {
            this.login = login;
            this.ulogovanKorisnik = ulogovanKorisnik;
            InitializeComponent();
            toolStripStatusLabel2.Text = ulogovanKorisnik.ime + " " + ulogovanKorisnik.prezime;
            if (ulogovanKorisnik.uloga == 0)
                toolStripStatusLabel4.Text = "Administrator";
            else
            {
                toolStripStatusLabel4.Text = "Radnik";
                tabovi.TabPages.Remove(tabPage3);
                tabovi.TabPages.Remove(tabPage4);
            }
            cbNaplaceni.SelectedIndex = 0;
            cbTipNaloga.SelectedIndex = 0; 
            rbAdmin.CheckedChanged += new EventHandler(rbAdmin_CheckedChanged);
            rbRadnik.CheckedChanged += new EventHandler(rbAdmin_CheckedChanged);
        }
        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            login.Close();
        }

        private String ispraviDuzinu(String s, int duzina)
        {
            if (s.Length > duzina)
            {
                return s.Substring(0, duzina);
            }
            else
            {
                int razlika = duzina - s.Length;
                for (int i = 0; i < razlika; i++)
                {
                    s += " ";
                }
                return s;
            }
        }


        #region Prodaja
        //popunjavam dataGridView1
        private void popuniArtikle()
        {
            dataGridView1.Rows.Clear();

            MySqlConnection conn = ConnectionPool.checkOutConnection();
            AutoStarBaza a1 = new AutoStarBaza(conn);
            var art = from a in a1.artikl
                      join b in a1.artiklcijena
                      on a.id equals b.artiklid
                      where !b.datumdo.HasValue
                      orderby a.naziv ascending
                      select new
                      {
                          Id = a.id,
                          Naziv = a.naziv,
                          Proizvodjac = a.proizvodjac,
                          Kolicina = a.kolicinaNaStanju,
                          Narucen = a.narucen,
                          Cijena = b.cijena
                      };

            foreach (var dgvr in art)
            {
                dataGridView1.Rows.Add(dgvr.Id, dgvr.Naziv, dgvr.Proizvodjac, dgvr.Kolicina, dgvr.Narucen, dgvr.Cijena);
            }
            ConnectionPool.checkInConnection(conn);
        }


        private void Form1_Load(object sender, EventArgs e)
        {
            popuniArtikle();//metoda za popunu dataGridView1
        }


        #region Pretraga artikala
        //pronadji celiju sa odgovarajucim imenom               
        private void filtriraj(string text, int kolona)
        {
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                if (row.Cells[kolona].Value.ToString().ToLower().Contains(text.ToLower()))  //sve u mala slova i pretragu i rezultate
                {
                    row.Selected = true;  //poklapanje
                    dataGridView1.FirstDisplayedScrollingRowIndex = row.Index;  //da skroluje do selektovanog artikla
                    break;
                }
                else
                {
                    row.Selected = false; //nema nista
                }
            }
        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            textBox8.Text = "";
            textBox1.Text = "";
            TextBox t = (TextBox)sender;
            filtriraj(t.Text, 1);   //filtriraj po nazivu artikla
        }

        private void textBox8_TextChanged(object sender, EventArgs e)
        {
            textBox2.Text = "";
            textBox1.Text = "";
            TextBox t = (TextBox)sender;
            filtriraj(t.Text, 2);   //filtriraj po proizvodjacu artikla
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            textBox2.Text = "";
            textBox8.Text = "";
            TextBox t = (TextBox)sender;
            filtriraj(t.Text, 0);  //filtriraj po sifri artikla
        }
        #endregion


        //pomocna metode: provjeravam da li je string broj
        public static bool jesteBroj(string text)
        {
            bool ok = true;
            for (int i = 0; i < text.Length; i++)
            {
                if (!char.IsNumber(text[i]))
                {
                    ok = false;
                }
            }
            return ok;
        }

        //pomocna metoda: cijena bez pdv-a
        public void formirajCijenu() 
        {
            decimal cijenaBPDV = 0;
            decimal cijenaRacun = 0;
            foreach (DataGridViewRow dg in dataGridView2.Rows) 
            {
                cijenaRacun+= Convert.ToDecimal(dg.Cells[4].Value);                
            }
            textBox5.Text = cijenaRacun.ToString();
            cijenaBPDV = cijenaRacun - ((cijenaRacun * (decimal)0.17));
            textBox3.Text = string.Format("{0:0.##}", cijenaBPDV);
            textBox4.Text = string.Format("{0:0.##}", (cijenaRacun - Convert.ToDecimal(cijenaBPDV)));
        }


        #region Dodavanje na racun
        //dugme dodaj na racun
        private void button1_Click(object sender, EventArgs e)
        {
            if (dataGridView1.SelectedRows.Count > 0 && jesteBroj(textBox6.Text) && ((Convert.ToDecimal(dataGridView1.SelectedCells[3].Value) - Convert.ToDecimal(textBox6.Text)) >= 0) && Convert.ToDecimal(textBox6.Text)>0)
            {
                dataGridView2.Rows.Add(dataGridView1.SelectedCells[0].Value, dataGridView1.SelectedCells[1].Value, dataGridView1.SelectedCells[2].Value, textBox6.Text, (Convert.ToDecimal(dataGridView1.SelectedCells[5].Value)) * (Convert.ToDecimal(textBox6.Text)));
                //smanji kolicinu artikala
                dataGridView1.SelectedCells[3].Value = Convert.ToDecimal(dataGridView1.SelectedCells[3].Value) - Convert.ToDecimal(textBox6.Text);
            }
            else
            {
                MessageBox.Show("Provjerite da li ste dobro unijeli kolicinu!", "Greska", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                textBox6.Text = "1";
            }
        }


        //dodaj na racun na dvoklik
        private void dataGridView1_DoubleClick(object sender, EventArgs e)
        {
            button1_Click(dataGridView1, e);
        }


        //dodaj na enter
        private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyValue == 13) //13 KeyChar od Enter-a
            {
                button1_Click(null, null);
            }
        }


        //dodaj na enter u kolicina
        private void textBox6_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == 13) //13 KeyChar od Enter-a
            {
                button1_Click(dataGridView1, e);
            }
        }


        #region Drag & Drop artikala na racun
        //selektuje kolonu iz artikala
        private void dataGridView1_MouseMove(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)//ako je lijevi mis
            {
                this.dataGridView1.DoDragDrop(this.dataGridView1.CurrentRow, DragDropEffects.All);//uzmi trenutnu vrstu i iskopiraj sve
            }
        }


        //kopira sadrzaj gornje kolone u pomocnu i onda upise na racun
        private void dataGridView2_DragDrop(object sender, DragEventArgs e)
        {
            DataGridViewRow row = e.Data.GetData(typeof(DataGridViewRow)) as DataGridViewRow;//prihvati kao ocekivani DataGridViewRow
            if (row != null)
            {
                DataGridViewRow r = row.Clone() as DataGridViewRow;//kloniraj primljenu vrstu
                for (int i = 0; i < r.Cells.Count; i++)
                {
                    r.Cells[i].Value = row.Cells[i].Value;//popuni celije
                }
                if (dataGridView1.SelectedRows.Count > 0 && jesteBroj(textBox6.Text) && ((Convert.ToDecimal(dataGridView1.SelectedCells[3].Value) - Convert.ToDecimal(textBox6.Text)) >= 0) && Convert.ToDecimal(textBox6.Text) > 0)//ako ima dovoljna kolicina
                {
                    //prebaci dole i izracunaj cijenu za tu kolicinu
                    this.dataGridView2.Rows.Add(r.Cells[0].Value, r.Cells[1].Value, r.Cells[2].Value, textBox6.Text, (Convert.ToDecimal(r.Cells[5].Value)) * (Convert.ToDecimal(textBox6.Text)));
                    //smanji kolicinu artikala na stanju gore
                    dataGridView1.SelectedCells[3].Value = Convert.ToDecimal(dataGridView1.SelectedCells[3].Value) - Convert.ToDecimal(textBox6.Text);
                }
            }
        }


        //definisanje tipa podataka za Drag & Drop
        private void dataGridView2_DragEnter(object sender, DragEventArgs e)
        {
            if (e.Data.GetDataPresent(typeof(DataGridViewRow)))//ako je drop ocekvani DataGridViewRow
            {
                e.Effect = DragDropEffects.Copy;//efekti drag i dropa 
            }
        }
        #endregion
        #endregion


        //upisuje u kolicinu jedinicu ako nije ispravan unos
        private void textBox6_Leave(object sender, EventArgs e)
        {
            if (textBox6.Text == "" || !jesteBroj(textBox6.Text) || Convert.ToDecimal(textBox6.Text)<1)
            {
                textBox6.Text = "1";
                MessageBox.Show("Provjerite da li ste dobro unijeli kolicinu!", "Greska", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
        }


        //obrisi vrstu selektovanu sa racuna
        private void button7_Click(object sender, EventArgs e)
        {
            if (dataGridView2.RowCount > 0)
            {
                //povecaj kolicinu artikla gore
                foreach (DataGridViewRow dg in dataGridView1.Rows)
                {
                    if (dg.Cells[0].Value == dataGridView2.SelectedCells[0].Value)//kad nadje odgovarajucu dozgo
                    {
                        //vrati joj kolicinu
                        dg.Cells[3].Value = Convert.ToDecimal(dataGridView2.SelectedCells[3].Value) + Convert.ToDecimal(dg.Cells[3].Value);
                        break;
                    }
                }
                dataGridView2.Rows.RemoveAt(dataGridView2.SelectedRows[0].Index);//ukloni selektovanu
                formirajCijenu();
            }
        }


        //dugme obrisi sve sa racuna
        private void button8_Click(object sender, EventArgs e)
        {
            dataGridView2.Rows.Clear();
            textBox3.Text = "";
            textBox5.Text = "";
            textBox4.Text = "";
            popuniArtikle();
        }


        private void toolStripStatusLabel5_Click(object sender, EventArgs e)
        {
            try{
            Process.Start(new ProcessStartInfo(Environment.CurrentDirectory+"\\help\\autostarpomoc.chm"));
            }
            catch(Exception ex)
            {
                MessageBox.Show("Dogodila se greska pri pokusaju ucitavanja datoteke pomoci. Ukoliko program radi u Win7+ okruzenju potrebno je da u Registry Editoru promjenite polja za podrsku *.chm datotekama.\nDetalji: "+ex.Message,"Sistemska greska", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private string brTrenutnogRacuna = "";
        //dugme zavrsi upis racuna
        private void button9_Click(object sender, EventArgs e)
        {
            if (dataGridView2.Rows.Count > 0)
            {
                MySqlConnection conn = ConnectionPool.checkOutConnection();
                AutoStarBaza a1 = new AutoStarBaza(conn);

                //pravljenje racuna
                racun r = new racun();
                r.broj = DateTime.Now.Millisecond.ToString() + DateTime.Now.Second.ToString();
                r.datum = DateTime.Parse(DateTime.Now.ToString());
                r.korisnikid = ulogovanKorisnik.id;//ovde ce ici statusStrip label text
                a1.racun.InsertOnSubmit(r);
                a1.SubmitChanges();
                brTrenutnogRacuna = r.broj;
                var racun = (from rac in a1.racun select rac).Last(); //id dodatog racuna

                //dodavanje stavki na taj racun
                foreach (DataGridViewRow dg in dataGridView2.Rows)//za svaku vrstu na racunu
                {
                    stavka st = new stavka();
                    st.kolicina = Convert.ToDecimal(dg.Cells[3].Value);
                    st.racunid = racun.id;
                    int idartikla = Convert.ToInt32(dg.Cells[0].Value);//uzmi id artikla koji je na redu iz dataGrid-a
                    var artcij = from ac in a1.artiklcijena          //pronadji njegovu aktuelnu cijenu iz artiklcijena (onu koja nema datum do)
                                 where ac.artiklid == idartikla && !ac.datumdo.HasValue
                                 select new
                                 {
                                     Id = ac.id
                                 };
                    st.artiklcijenaid = artcij.First().Id;
                    a1.stavka.InsertOnSubmit(st);
                    a1.SubmitChanges();//upisi stavke u bazu

                    foreach (DataGridViewRow dg1 in dataGridView1.Rows)//i za svaki artikl odozgo
                    {
                        if (dg1.Cells[0].Value == dg.Cells[0].Value)//provjeri koji se trnutno obradjuje sa racuna
                        {
                            int id = Convert.ToInt32(dg1.Cells[0].Value);//uzmi mu id
                            var a = (from art in a1.artikl
                                     where art.id == id
                                     select art).Single();//izvuci ga iz baze
                            a.kolicinaNaStanju = Convert.ToDecimal(dg1.Cells[3].Value);//i smanji mu kolicinu
                            a1.SubmitChanges();//upisi
                            break;
                        }
                    }
                }

                ConnectionPool.checkInConnection(conn);

                //Štampanje računa
                printDialog.Document = pdRacun;
                if (printDialog.ShowDialog() == DialogResult.OK)
                {
                    pdRacun.Print();
                }

                dataGridView2.Rows.Clear();//ocisti racun
                textBox3.Text = "";
                textBox5.Text = "";
                textBox4.Text = "";
                toolStripStatusLabel6.Text = "Račun uspješan!";//ispisi potvrdu akcije
                toolStripStatusLabel6.BackColor = Color.Green;
                popuniArtikle();
                brTrenutnogRacuna = "";
            }
        }


        //obrisi inicijalnu kolicinu
        private void textBox6_MouseClick(object sender, MouseEventArgs e)
        {
            textBox6.Text = "";
        }


        //formira cijenu pri dodavanju artikala na racun
        private void dataGridView2_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
        {
            formirajCijenu();
            //int gridId = Convert.ToInt32(dataGridView2.Rows[dataGridView2.Rows.GetLastRow(DataGridViewElementStates.Displayed)].Cells[0].Value);
            //decimal gridCijena = Convert.ToDecimal(dataGridView2.Rows[dataGridView2.Rows.GetLastRow(DataGridViewElementStates.Displayed)].Cells[4].Value);
            //cijenaRacun += gridCijena;
            //textBox5.Text = cijenaRacun.ToString();
            //String bezPDV = (cijenaRacun - ((cijenaRacun * (decimal)0.17))).ToString();
            //textBox3.Text = string.Format("{0:0.##}", bezPDV);
            //textBox4.Text = string.Format("{0:0.##}", (cijenaRacun - Convert.ToDecimal(bezPDV)));
        }


        //dugme otvori formu za unos novog artikla
        private void button2_Click(object sender, EventArgs e)
        {
            NoviArtikl na = new NoviArtikl();
            na.ShowDialog();
            popuniArtikle();
        }


        //dugme obrisi artikl
        private void button4_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show("Da li ste sigurni da zelite obrisati selektovani artikl?", "Potvrda", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) == DialogResult.OK)
            {
                if (dataGridView1.SelectedRows.Count > 0)
                {
                    MySqlConnection conn = ConnectionPool.checkOutConnection();
                    AutoStarBaza a1 = new AutoStarBaza(conn);

                    int idArtikla = Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[0].Value);

                    var obr = (from o in a1.artiklcijena
                               where idArtikla == o.artiklid && !o.datumdo.HasValue
                               select o).Single();

                    obr.datumdo = DateTime.Now;//artikl je neaktivan kad ima sve datume so popunjene
                    a1.SubmitChanges();
                    ConnectionPool.checkInConnection(conn);
                    popuniArtikle();
                }
            }
        }


        //dugme izmjeni artikle
        private void button3_Click(object sender, EventArgs e)
        {
            IzmjeniArtikl ia = new IzmjeniArtikl(dataGridView1.SelectedRows[0].Cells[0].Value.ToString());//proslijedi id
            ia.ShowDialog();
            popuniArtikle();
        }


        //obrisi zelenu labelu
        private void button9_Leave(object sender, EventArgs e)
        {
            toolStripStatusLabel6.Text = "";
            toolStripStatusLabel6.BackColor = Color.White;
        }

        private void pdRacun_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            e.Graphics.DrawString("AUTOSTAR d.o.o", new Font("Courier New", 24), Brushes.Black, 100, 20);
            e.Graphics.DrawString("Broj telefona: 051/385-008", new Font("Courier New", 14), Brushes.Black, 100, 60);
            e.Graphics.DrawString("Adresa: Put srpskih branilaca 110", new Font("Courier New", 14), Brushes.Black, 100, 80);
            e.Graphics.DrawString("78000 Banja Luka", new Font("Courier New", 14), Brushes.Black, 100, 100);
            e.Graphics.DrawString("IBO: 4402281360007", new Font("Courier New", 14), Brushes.Black, 100, 120);
            e.Graphics.DrawString("IPO: 402281360007", new Font("Courier New", 14), Brushes.Black, 100, 140);
            e.Graphics.DrawString("IBFM: ET009520", new Font("Courier New", 14), Brushes.Black, 100, 160);

            if (brTrenutnogRacuna != "") e.Graphics.DrawString("Br. računa: " + brTrenutnogRacuna, new Font("Courier New", 14), Brushes.Black, 100, 180);

            e.Graphics.DrawString(ispraviDuzinu("Šifra", 15) + ispraviDuzinu("Naziv", 20) + ispraviDuzinu("Količina", 9) + ispraviDuzinu("Cijena", 9), new Font("Courier New", 14), Brushes.Black, 100, 230);
            e.Graphics.DrawString("____________________________________________________", new Font("Courier New", 14), Brushes.Black, 100, 230);
            int y = 270;
            for (int i = 0; i < dataGridView2.Rows.Count; i++)
            {

                String sifra = ispraviDuzinu(dataGridView2.Rows[i].Cells[0].Value.ToString(), 15);
                String naziv = ispraviDuzinu(dataGridView2.Rows[i].Cells[1].Value.ToString(), 20);
                String kolicina = ispraviDuzinu(dataGridView2.Rows[i].Cells[3].Value.ToString(), 9);
                String cijena = ispraviDuzinu(dataGridView2.Rows[i].Cells[4].Value.ToString(), 9);

                e.Graphics.DrawString(sifra + naziv + kolicina + cijena, new Font("Courier New", 14), Brushes.Black, 100, y += 20);
            }
            e.Graphics.DrawString("____________________________________________________", new Font("Courier New", 14), Brushes.Black, 100, y += 20);
            String cijenaBezPDVa = "Cijena: " + textBox3.Text + " KM";
            String PDV = "PDV: " + textBox4.Text + " KM";
            String ukupno = "Ukupno: " + textBox5.Text + " KM";
            e.Graphics.DrawString("Radnik: " + ulogovanKorisnik.ime + " " + ulogovanKorisnik.prezime, new Font("Courier New", 14), Brushes.Black, 100, y+=30);
            e.Graphics.DrawString("Datum:" + DateTime.Now.ToString("dd.MM.yyyy. hh:mm"), new Font("Courier New", 14), Brushes.Black, 100, y += 20);
            e.Graphics.DrawString(cijenaBezPDVa, new Font("Courier New", 14), Brushes.Black, 100, y += 20);
            e.Graphics.DrawString(PDV, new Font("Courier New", 14), Brushes.Black, 100, y += 20);
            e.Graphics.DrawString(ukupno, new Font("Courier New", 14), Brushes.Black, 100, y += 20);
        }

        #endregion

        #region Izvjestaj

        private void btnPrikazi_Click(object sender, EventArgs e)
        {
            generisiIzvjestaj();
        }
        DateTime datumOd = DateTime.Now;
        DateTime datumDo = DateTime.Now;
        private void generisiIzvjestaj()
        {
            dgvIzvjestaj.Rows.Clear();
            datumOd = dtpOd.Value.Date;
            datumDo = dtpDo.Value.Date;
            datumDo = datumDo.AddDays(1);

            MySqlConnection conn = ConnectionPool.checkOutConnection();
            AutoStarBaza context = new AutoStarBaza(conn);
            var racuni = from rac in context.racun
                         join rad in context.korisnik
                         on rac.korisnikid equals rad.id
                         where rac.datum >= datumOd && rac.datum <= datumDo
                         select new
                         {
                             id = rac.id,
                             broj = rac.broj,
                             datum = rac.datum,
                             radnikIme = rad.ime,
                             radnikPrezime = rad.prezime,
                         };
            decimal ukupnoIzvjestaj = 0;
            foreach (var racun in racuni)
            {
                decimal cijenaRacuna = 0;
                var artikli = from st in context.stavka
                              join ac in context.artiklcijena
                              on st.artiklcijenaid equals ac.id
                              where st.racunid == racun.id
                              select new
                              {
                                  kolicina = st.kolicina,
                                  cijena = ac.cijena
                              };
                foreach (var artikl in artikli)
                {
                    cijenaRacuna += artikl.kolicina * artikl.cijena;
                }
                ukupnoIzvjestaj += cijenaRacuna;
                dgvIzvjestaj.Rows.Add(racun.broj, racun.datum, racun.radnikIme + " " + racun.radnikPrezime, cijenaRacuna.ToString("#.##"));
            }
            txtIzvjestajiUkupno.Text = "" + ukupnoIzvjestaj.ToString("#.##");
            ConnectionPool.checkInConnection(conn);
        }

        private void dgvIzvjestaj_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            dgvRacun.Rows.Clear();
            string brojRacuna = dgvIzvjestaj.Rows[e.RowIndex].Cells[0].Value.ToString();
            MySqlConnection conn = ConnectionPool.checkOutConnection();
            AutoStarBaza context = new AutoStarBaza(conn);
            var artikli = from rac in context.racun
                          join st in context.stavka
                          on rac.id equals st.racunid
                          join ac in context.artiklcijena
                          on st.artiklcijenaid equals ac.id
                          join a in context.artikl
                          on ac.artiklid equals a.id
                          where rac.broj == brojRacuna
                          select new
                          {
                              sifra = a.id,
                              naziv = a.naziv,
                              proizvodjac = a.proizvodjac,
                              kolicina = st.kolicina,
                              cijena = ac.cijena,
                          };
            foreach (var artikl in artikli)
            {
                dgvRacun.Rows.Add(artikl.sifra, artikl.naziv, artikl.proizvodjac, artikl.kolicina, artikl.cijena);
            }
            ConnectionPool.checkInConnection(conn);
        }

        private void txtIzvjestajiUkupno_TextChanged(object sender, EventArgs e)
        {
            if (txtIzvjestajiUkupno.Text == "") txtIzvjestajiUkupno.Text = "0";
        }

        private void btnIzvjestajiStampaj_Click(object sender, EventArgs e)
        {
            printDialog.Document = pdIzvjestaj;
            if (printDialog.ShowDialog() == DialogResult.OK)
            {
                pdIzvjestaj.Print();
            }
        }

        private void pdIzvjestaj_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            e.Graphics.DrawString("AutoStar", new Font("Courier New", 24), Brushes.Black, 70, 20);
            e.Graphics.DrawString("Finansijski izvještaj", new Font("Courier New", 14), Brushes.Black, 70, 70);
            e.Graphics.DrawString("Od: " + datumOd.ToString("dd. MM. yyyy."), new Font("Courier New", 14), Brushes.Black, 70, 90);
            e.Graphics.DrawString("Do: " + datumDo.AddDays(-1.0).ToString("dd. MM. yyyy."), new Font("Courier New", 14), Brushes.Black, 70, 110);
            e.Graphics.DrawString(ispraviDuzinu("Broj", 10) + ispraviDuzinu("Datum", 10) + ispraviDuzinu("Vrijeme", 10) + ispraviDuzinu("Radnik", 20) + ispraviDuzinu("Cijena", 9), new Font("Courier New", 14), Brushes.Black, 70, 150);
            e.Graphics.DrawString("--------------------------------------------------------", new Font("Courier New", 14), Brushes.Black, 70, 170);

            int y = 170;
            for (int i = 0; i < dgvIzvjestaj.Rows.Count; i++)
            {
                int duzinaDatuma = dgvIzvjestaj.Rows[i].Cells[1].Value.ToString().Length;

                String broj = ispraviDuzinu(dgvIzvjestaj.Rows[i].Cells[0].Value.ToString(), 10);
                String datum = ispraviDuzinu(dgvIzvjestaj.Rows[i].Cells[1].Value.ToString(), 10);
                String vrijeme = ispraviDuzinu(dgvIzvjestaj.Rows[i].Cells[1].Value.ToString().Substring(duzinaDatuma - 8), 10);
                String radnik = ispraviDuzinu(dgvIzvjestaj.Rows[i].Cells[2].Value.ToString(), 20);
                String cijena = ispraviDuzinu(dgvIzvjestaj.Rows[i].Cells[3].Value.ToString(), 9);
                e.Graphics.DrawString(broj + datum + vrijeme + radnik + cijena, new Font("Courier New", 14), Brushes.Black, 70, y += 20);
            }
            e.Graphics.DrawString("--------------------------------------------------------", new Font("Courier New", 14), Brushes.Black, 70, y += 20);
            String ukupno = "Ukupno: " + txtIzvjestajiUkupno.Text;
            e.Graphics.DrawString(ukupno, new Font("Courier New", 14), Brushes.Black, 70, y += 20);
        }

        #endregion

        #region Servis

        private artikl artiklServis = null;
        private artikl artiklPregled = null;
        private artiklcijena acServis = null;
        private artiklcijena acPregled = null;
        private List<string> naloziNaRacunu = new List<string>();
        private decimal racunBezPDV = 0;
        private decimal racunPDV = 0;

        private void btnNoviNalog_Click(object sender, EventArgs e)
        {
            Nalog n = new Nalog(ulogovanKorisnik.id, this);
            n.Show();
        }

        private void btnTrazi_Click(object sender, EventArgs e)
        {
            pretragaNaloga();
        }

        public void pretragaNaloga()
        {
            dgvNalozi.Rows.Clear();
            MySqlConnection conn = ConnectionPool.checkOutConnection();
            AutoStarBaza context = new AutoStarBaza(conn);
            var nalozi = from n in context.nalog
                         join k in context.korisnik
                         on n.korisnikid equals k.id
                         where n.broj.Contains(txtBrojRacuna.Text)
                            && ((cbTipNaloga.SelectedIndex == 1 && n.tipNaloga == 0) || (cbTipNaloga.SelectedIndex == 2 && n.tipNaloga == 1) || cbTipNaloga.SelectedIndex == 0)
                            && ((cbNaplaceni.SelectedIndex == 1 && n.broj.Contains("/")) || (cbNaplaceni.SelectedIndex == 2 && !n.broj.Contains("/")) || cbNaplaceni.SelectedIndex == 0)
                         select new
                         {
                             broj = n.broj,
                             datum = n.datum,
                             tip = n.tipNaloga,
                             sadrzaj = n.sadrzaj,
                             korisnikIme = k.ime,
                             korisnikPrezime = k.prezime
                         };
            foreach (var nalog in nalozi)
            {
                dgvNalozi.Rows.Add(nalog.broj, nalog.datum, nalog.tip == 0 ? "Pregled" : "Servis", nalog.sadrzaj, nalog.korisnikIme + " " + nalog.korisnikPrezime);
            }
            ConnectionPool.checkInConnection(conn);
        }

        private void btnIzmjenaNaloga_Click(object sender, EventArgs e)
        {
            if (dgvNalozi.SelectedRows.Count > 0)
            {
                Nalog n = new Nalog(ulogovanKorisnik.id, this, "" + dgvNalozi.SelectedCells[0].Value);
                n.Show();
            }
            else
            {
                MessageBox.Show("Niste izabrali nalog!", "Upozorenje", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }
        private void btnDodaj_Click(object sender, EventArgs e)
        {
            decimal kolicina = 0;
            if (dgvNalozi.SelectedRows.Count==0)
            {
                MessageBox.Show("Niste izabrali nalog!", "Upozorenje", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else if (naloziNaRacunu.Contains(dgvNalozi.SelectedCells[0].Value.ToString()))
            {
                MessageBox.Show("Nalog je već na računu!", "Upozorenje", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
			else if(dgvNalozi.SelectedRows[0].Cells[0].Value.ToString().Contains("/"))
            {
                MessageBox.Show("Nalog je već naplaćen!", "Upozorenje", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
            else if (decimal.TryParse(txtServisKolicina.Text, out kolicina) && kolicina > 0)
            {
                decimal ukupno = decimal.Parse(txtServisUkupno.Text);
                if (dgvNalozi.SelectedCells[2].Value.ToString() == "Servis")
                {
                    if (artiklServis == null)
                    {
                        MySqlConnection conn = ConnectionPool.checkOutConnection();
                        AutoStarBaza context = new AutoStarBaza(conn);
                        artiklServis = (
                            from a in context.artikl
                            where a.naziv == "Servis"
                            select a
                            ).Single();
                        acServis = (
                            from ac in context.artiklcijena
                            where ac.artiklid == artiklServis.id
                            select ac
                            ).Single();
                        ConnectionPool.checkInConnection(conn);
                    }
                    decimal cijenaNalog = kolicina * acServis.cijena;
                    decimal nalogPDV = kolicina * acServis.cijena * artiklServis.stopaPDV / 100;
                    decimal cijenaNalogUkupno = cijenaNalog + nalogPDV;
                    racunBezPDV += cijenaNalog;
                    txtServisCijena.Text = racunBezPDV.ToString("#.##");
                    racunPDV += nalogPDV;
                    txtServisPDV.Text = racunPDV.ToString("#.##");
                    ukupno += cijenaNalogUkupno;
                    txtServisUkupno.Text = ukupno.ToString("#.##");
                    dgvServisRacun.Rows.Add(artiklServis.id, artiklServis.naziv, kolicina, cijenaNalogUkupno.ToString("#.##"), artiklServis.stopaPDV);
                }
                else
                {
                    if (artiklPregled == null)
                    {
                        MySqlConnection conn = ConnectionPool.checkOutConnection();
                        AutoStarBaza context = new AutoStarBaza(conn);
                        artiklPregled = (
                            from a in context.artikl
                            where a.naziv == "Pregled"
                            select a
                            ).Single();
                        acPregled = (
                            from ac in context.artiklcijena
                            where ac.artiklid == artiklPregled.id
                            select ac
                            ).Single();
                        ConnectionPool.checkInConnection(conn);
                    }
                    decimal cijenaNalog = kolicina * acPregled.cijena;
                    decimal nalogPDV =kolicina * acPregled.cijena * artiklPregled.stopaPDV / 100;
                    decimal cijenaNalogUkupno = cijenaNalog + nalogPDV;
                    racunBezPDV += cijenaNalog;
                    txtServisCijena.Text = racunBezPDV.ToString("#.##");
                    racunPDV += nalogPDV;
                    txtServisPDV.Text = racunPDV.ToString("#.##");
                    ukupno += cijenaNalogUkupno;
                    txtServisUkupno.Text = ukupno.ToString("#.##");
                    dgvServisRacun.Rows.Add(artiklPregled.id, artiklPregled.naziv, kolicina, cijenaNalogUkupno.ToString("#.##"), artiklPregled.stopaPDV);
                }
                naloziNaRacunu.Add(dgvNalozi.SelectedCells[0].Value.ToString());
            }
            else
            {
                MessageBox.Show("Pogrešan unos!", "Upozorenje", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

        private void btnServisBrisi_Click(object sender, EventArgs e)
        {
            if (dgvServisRacun.SelectedRows.Count > 0)
            {
                decimal ukupno = decimal.Parse(txtServisUkupno.Text);
                decimal cijenaUkupno = decimal.Parse(dgvServisRacun.SelectedCells[3].Value.ToString());
                decimal stopaPDV = decimal.Parse(dgvServisRacun.SelectedCells[4].Value.ToString());
                decimal cijenaPDV = cijenaUkupno * (stopaPDV / (stopaPDV + 100));
                decimal cijenaBezPDV = cijenaUkupno - cijenaPDV;
                ukupno -= cijenaUkupno;
                racunBezPDV -= cijenaBezPDV;
                txtServisCijena.Text = racunBezPDV.ToString("#.##");
                racunPDV -= cijenaPDV;
                txtServisPDV.Text = racunPDV.ToString("#.##");
                naloziNaRacunu.RemoveAt(dgvServisRacun.SelectedRows[0].Index);
                dgvServisRacun.Rows.RemoveAt(dgvServisRacun.SelectedRows[0].Index);
                txtServisUkupno.Text = ukupno.ToString("#.##");
            }
        }

        private void txtServisUkupno_TextChanged(object sender, EventArgs e)
        {
            if (txtServisUkupno.Text == "") txtServisUkupno.Text = "0";
        }

        private void btnServisZavrsi_Click(object sender, EventArgs e)
        {
            DateTime dt = DateTime.Now;
            MySqlConnection conn = ConnectionPool.checkOutConnection();
            AutoStarBaza context = new AutoStarBaza(conn);
            racun r = new racun();
            r.datum = dt;
            r.korisnikid = ulogovanKorisnik.id;
            r.robnaKarticaid = 1;
            r.broj = "";
            context.racun.InsertOnSubmit(r);
            context.SubmitChanges();
            r.broj = r.id + "-" + dt.ToString("MMyy");
            brTrenutnogRacuna = r.broj;
            context.SubmitChanges();
            for (int i = 0; i < dgvServisRacun.Rows.Count; i++)
            {
                stavka s = new stavka();
                s.kolicina=decimal.Parse(dgvServisRacun.Rows[i].Cells[2].Value.ToString());
                s.racunid = r.id;
                s.artiklcijenaid = dgvServisRacun.Rows[i].Cells[1].Value.ToString() == "Servis" ? acServis.id : acPregled.id;
                context.stavka.InsertOnSubmit(s);
                context.SubmitChanges();
                naplatiNalog(naloziNaRacunu[0], s.id);
                context.SubmitChanges();
                naloziNaRacunu.RemoveAt(0);
            }
            ConnectionPool.checkInConnection(conn);
            printDialog.Document = pdServisRacun;
            if (printDialog.ShowDialog() == DialogResult.OK)
            {
                pdServisRacun.Print();
            }
            dgvServisRacun.Rows.Clear();
            pretragaNaloga();
            txtServisUkupno.Text = "0";
            txtServisCijena.Text = "0";
            txtServisPDV.Text = "0";
            brTrenutnogRacuna = "";
            racunPDV = 0;
            racunBezPDV = 0;
        }
        public void naplatiNalog(string brojNaloga, int idStavke)
        {
            MySqlConnection conn = ConnectionPool.checkOutConnection();
            AutoStarBaza context = new AutoStarBaza(conn);
            nalog nl = (from n in context.nalog
                       where n.broj == brojNaloga
                       select n).Single();
            nl.broj += "/" + idStavke;
            context.SubmitChanges();
            ConnectionPool.checkInConnection(conn);
        }

        private void pdServisRacun_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
        {
            e.Graphics.DrawString("AUTOSTAR d.o.o", new Font("Courier New", 24), Brushes.Black, 100, 20);
            e.Graphics.DrawString("Broj telefona: 051/385-008", new Font("Courier New", 14), Brushes.Black, 100, 60);
            e.Graphics.DrawString("Adresa: Put srpskih branilaca 110, 78000 Banja Luka", new Font("Courier New", 14), Brushes.Black, 100, 80);
            e.Graphics.DrawString("78000 Banja Luka", new Font("Courier New", 14), Brushes.Black, 100, 100);
            e.Graphics.DrawString("IBO: 4402281360007", new Font("Courier New", 14), Brushes.Black, 100, 120);
            e.Graphics.DrawString("IPO: 402281360007", new Font("Courier New", 14), Brushes.Black, 100, 140);
            e.Graphics.DrawString("IBFM: ET009520", new Font("Courier New", 14), Brushes.Black, 100, 160);
            if (brTrenutnogRacuna != "") e.Graphics.DrawString("Br. računa: " + brTrenutnogRacuna, new Font("Courier New", 14), Brushes.Black, 100, 180);

            e.Graphics.DrawString(ispraviDuzinu("Šifra", 15) + ispraviDuzinu("Naziv", 20) + ispraviDuzinu("Količina", 9) + ispraviDuzinu("Cijena", 9), new Font("Courier New", 14), Brushes.Black, 100, 210);
            e.Graphics.DrawString("__________________________________________________", new Font("Courier New", 14), Brushes.Black, 100, 230);
            int y = 250;
            for (int i = 0; i < dgvServisRacun.Rows.Count; i++)
            {

                String sifra = ispraviDuzinu(dgvServisRacun.Rows[i].Cells[0].Value.ToString(), 15);
                String naziv = ispraviDuzinu(dgvServisRacun.Rows[i].Cells[1].Value.ToString(), 20);
                String kolicina = ispraviDuzinu(dgvServisRacun.Rows[i].Cells[2].Value.ToString(), 9);
                String cijena = ispraviDuzinu(dgvServisRacun.Rows[i].Cells[3].Value.ToString(), 9);

                e.Graphics.DrawString(sifra + naziv + kolicina + cijena, new Font("Courier New", 14), Brushes.Black, 100, y += 20);
            }
            e.Graphics.DrawString("__________________________________________________", new Font("Courier New", 14), Brushes.Black, 100, y += 20);
            String ukupno = "Ukupno: " + txtServisUkupno.Text+ "KM";
            String cijenaBezPDVa = "Cijena: " + racunBezPDV.ToString("#.##") + " KM";
            String PDV = "PDV: " + racunPDV.ToString("#.##") + " KM";
            e.Graphics.DrawString("Radnik: " + ulogovanKorisnik.ime + " " + ulogovanKorisnik.prezime, new Font("Courier New", 14), Brushes.Black, 100, y+=30);
            e.Graphics.DrawString("Datum:" + DateTime.Now.ToString("dd.MM.yyyy. hh:mm"), new Font("Courier New", 14), Brushes.Black, 100, y += 20);
            e.Graphics.DrawString(cijenaBezPDVa, new Font("Courier New", 14), Brushes.Black, 100, y += 20);
            e.Graphics.DrawString(PDV, new Font("Courier New", 14), Brushes.Black, 100, y += 20);
            e.Graphics.DrawString(ukupno, new Font("Courier New", 14), Brushes.Black, 100, y += 20);
        }

        private void txtServisCijena_TextChanged(object sender, EventArgs e)
        {
            if (txtServisCijena.Text == "") txtServisCijena.Text = "0";
        }

        private void txtServisPDV_TextChanged(object sender, EventArgs e)
        {
            if (txtServisPDV.Text == "") txtServisPDV.Text = "0";
        }

        #endregion

        #region Administracija
       
        public void popuniKomboMjesto(int index = 0)
        {
            try
            {
                MySqlConnection conn = ConnectionPool.checkOutConnection();
                AutoStarBaza ctx = new AutoStarBaza(conn);
                var upit = from s in ctx.mjesto select s;
                int ukupno = 0;
                cboxGrad.Items.Clear();
                foreach (var m in upit)
                {
                    cboxGrad.Items.Add(m.brojPoste+" , "+m.naziv+" , "+m.drzava.naziv);
                    if (m.id == index)
                        ukupno = cboxGrad.Items.Count;
                }
                    cboxGrad.SelectedIndex = ukupno;
                ConnectionPool.checkInConnection(conn);
            }
            catch (MySqlException ex)
            {
                MessageBox.Show("Nije moguce povezati se sa bazom podataka. Program ce se zavrsiti. Detalji: " + ex.Message, "Problem u ucitavanju baze podataka", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.Close();
            }
            finally
            { }
        }
        public void popuniKomboIzbor(int index = 0)
        {
            try
            {
                cboxGrad.Items.Clear();
                popuniKomboMjesto();
                cboxIzaberiKorisnika.Items.Clear();
                MySqlConnection conn = ConnectionPool.checkOutConnection();
                AutoStarBaza ctx = new AutoStarBaza(conn);
                var upit1 = from s1 in ctx.korisnik
                            join s2 in ctx.kontakt on s1.kontaktid equals s2.id
                            join s3 in ctx.mjesto on s2.mjestoid equals s3.id
                            orderby s1.id ascending
                            select new { ime1=s1.ime,
                            prezime1=s1.prezime,
                            uloga1=s1.uloga,
                            adresa1=s2.adresa,
                            racun1=s2.ziroRacun,
                            mail1=s2.email,
                            mjesto1=s3.naziv,
                            brposte=s3.brojPoste,
                            drzavaKey=s3.drzavaid,
                            mjestoKey=s3.id
                            };
                if(temp!=null)
                    temp.Clear();
                cboxIzaberiKorisnika.Items.Clear();
                foreach(var m in upit1)
                {
                    Personal person = new Personal();
                    person.Name = m.ime1;
                    person.Role = (m.uloga1 == 0) ? true : false;
                    person.Account = m.racun1;
                    person.EMail = m.mail1;
                    person.Surname = m.prezime1;
                    person.CityKey = m.mjestoKey;
                    person.CountryKey = m.drzavaKey;
                    person.Street = m.adresa1;
                    temp.Add(person);
                    cboxIzaberiKorisnika.Items.Add(person.Name + " " + person.Surname + " , " +person.Street+" , "+ m.mjesto1);
                }
                cboxIzaberiKorisnika.SelectedIndex = 0;
                ConnectionPool.checkInConnection(conn);
            }
            catch (MySqlException ex)
            {
                MessageBox.Show("Nije moguce povezati se sa bazom podataka. Program ce se zavrsiti. Detalji: " + ex.Message, "Problem u ucitavanju baze podataka", MessageBoxButtons.OK, MessageBoxIcon.Error);
                this.Close();
            }
            finally { }
        }
        private void cboxIzaberiKorisnika_SelectedIndexChanged(object sender, EventArgs e)
        {
            cboxGrad.Items.Clear();
            Personal person = temp[cboxIzaberiKorisnika.SelectedIndex];
            popuniKomboMjesto(person.CityKey-1);
            tbUserName.Text= null;
            tbLozinka.Text = null;
            tbIme.Text = person.Name;
            tbPrezime.Text = person.Surname;
            tbAdresa.Text = person.Street;
            tbMailAdresa.Text = person.EMail;
            mtbRacun.Text = person.Account;
            if (person.Role)
            {
                rbAdmin.Checked = true;
            }
            else
            {
                rbRadnik.Checked = true;
            }
            person4Change = temp[cboxIzaberiKorisnika.SelectedIndex];
        }
        private void cboxIzaberiKorisnika_VisibleChanged(object sender, EventArgs e)
        {
            if (cboxIzaberiKorisnika.Visible == true)
            {
                popuniKomboIzbor(0);
            }
        }
        public void refresuj()
        {
            lIzaberiKorisnika.Visible = false;
            cboxIzaberiKorisnika.Visible = false;
            lIzaberiKorisnika.Visible = true;
            cboxIzaberiKorisnika.Visible = true;
            novi_korisnik = false;
        }
        private void btnOdustani_Click(object sender, EventArgs e)
        {
            tbUserName.Text = null;
            tbLozinka.Text = null;
            tbIme.Text = null;
            tbPrezime.Text = null;
            tbAdresa.Text = null;
            tbMailAdresa.Text = null;
            refresuj();
            tabovi.SelectedIndex = 0;
        }
        private void btnNoviGrad_Click(object sender, EventArgs e)
        {
            Form1 arg = this;
            DijalogGrad dijalog = new DijalogGrad(ref arg);
            dijalog.ShowDialog();
        }
        private void tbUserName_TextChanged(object sender, EventArgs e)
        {
            if(tbUserName.TextLength!=0)
            person4Change.UserName = (tbUserName.Text).Trim();
        }
        private void tbLozinka_TextChanged(object sender, EventArgs e)
        {
            if(tbLozinka.TextLength!=0)
            person4Change.Password = (tbLozinka.Text).Trim();
        }
        private void tbIme_TextChanged(object sender, EventArgs e)
        {
            person4Change.Name= (tbIme.Text).Trim();
        }
        private void tbPrezime_TextChanged(object sender, EventArgs e)
        {
            person4Change.Surname = (tbPrezime.Text).Trim();
        }
        private void tbAdresa_TextChanged(object sender, EventArgs e)
        {
            person4Change.Street = (tbAdresa.Text).Trim();
        }
        private void tbMailAdresa_TextChanged(object sender, EventArgs e)
        {
            person4Change.EMail = (tbMailAdresa.Text).Trim();
        }
        private void mtbRacun_TextChanged(object sender, EventArgs e)
        {
            person4Change.Account = (mtbRacun.Text).Trim();
        }
        private void cboxGrad_SelectedIndexChanged(object sender, EventArgs e)// ovdje je bila greska
        {
   string [] temp = (Convert.ToString(cboxGrad.SelectedItem)).Split(',');
            string temp1 = temp[temp.Length - 2].Trim();
            try{
                MySqlConnection conn= ConnectionPool.checkOutConnection();
                AutoStarBaza ctx=new AutoStarBaza(conn);
                int index = 1;
                var upit = from s in ctx.mjesto where s.naziv == temp1 select new { Id=s.id};
                foreach (var m in upit)
                    index = m.Id;
                person4Change.CityKey = index;
                ConnectionPool.checkInConnection(conn);
                      }
            finally
            {}
        }
        private void rbAdmin_CheckedChanged(object sender, EventArgs e)
        {
            RadioButton rbObjekat = (RadioButton)sender;
            string rbIme=rbObjekat.Name;
            if (rbObjekat.Checked)
            {
                switch(rbIme)
                {
                    case "rbAdmin":
                        person4Change.Role = true;
                        break;
                    case "rbRadnik":
                        person4Change.Role = false;
                        break;
                }
            }
        }
        private void btnNoviKorisnik_Click(object sender, EventArgs e)
        {
            cboxIzaberiKorisnika.Visible = false;
            lIzaberiKorisnika.Visible = false;
            tbUserName.Text = null;
            tbLozinka.Text = null;
            tbIme.Text = null;
            tbPrezime.Text = null;
            tbAdresa.Text = null;
            tbMailAdresa.Text = null;
            mtbRacun.Text = null;
            cboxGrad.SelectedIndex = 0;
            rbRadnik.Checked = true;
            novi_korisnik = true;
        }

        private void btnSacuvaj_Click(object sender, EventArgs e)
        {
            if (novi_korisnik)
            {
                try
                {
                    if ((person4Change.UserName.Length == 0) || (person4Change.Password.Length == 0))
                    {
                        MessageBox.Show("Niste unijeli korisnicko ime ili lozinku. Upis podataka nece biti izvrsen.", "Greska", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        refresuj();
                        return;
                    }
                    MySqlConnection konekcija = ConnectionPool.checkOutConnection();
                    AutoStarBaza ctx = new AutoStarBaza(konekcija);
                    korisnik user1 = new korisnik();
                    kontakt kontakt1 = new kontakt();
                    kontakt1.adresa = person4Change.Street;
                    kontakt1.email = person4Change.EMail;
                    kontakt1.ziroRacun = person4Change.Account;
                    kontakt1.mjestoid = person4Change.CityKey;
                    ctx.kontakt.InsertOnSubmit(kontakt1);
                    ctx.SubmitChanges();                                            // treba objasnjenje od srdjana
                    var upit = from s in ctx.kontakt where s.ziroRacun == person4Change.Account select s;
                    int kont_id = upit.First().id;
                    user1.kontaktid = kont_id;
                    user1.userName = person4Change.UserName;
                    user1.password = person4Change.PasswordHash;
                    user1.ime = person4Change.Name;
                    user1.prezime = person4Change.Surname;
                    
                    if (person4Change.Role == true)
                    {
                        user1.uloga = 0;
                    }
                    else
                    {
                        user1.uloga = 1;
                    }
                    ctx.korisnik.InsertOnSubmit(user1);
                    ctx.SubmitChanges();
                    refresuj();
                    ConnectionPool.checkInConnection(konekcija);
                }
                catch (MySqlException ex)
                {
                    MessageBox.Show("Nije moguce povezati se sa bazom podataka. Program ce se zavrsiti. Detalji: " + ex.Message, "Problem u ucitavanju baze podataka", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    this.Close();
                }
                finally
                { }
            }
            //kraj if 

            else
            {
                try
                {
                    MySqlConnection kon = ConnectionPool.checkOutConnection();
                    AutoStarBaza ctx1 = new AutoStarBaza(kon);
                    var upit1 = from s1 in ctx1.korisnik
                                join s2 in ctx1.kontakt on s1.kontaktid equals s2.id
                                join s3 in ctx1.mjesto on s2.mjestoid equals s3.id
                                orderby s1.id ascending
                                select new
                                {
                                    korisnikId1=s1.id,
                                    kontakt_id1=s1.kontaktid,
                                };

                    int korisnik_id1 = upit1.First().korisnikId1;
                    int kontakt_id1 = upit1.First().kontakt_id1;

                    if ((person4Change.UserName == null) || (person4Change.Password == null))
                    {
                        var upit2 = from s in ctx1.kontakt where s.id == kontakt_id1 select s;
                        foreach (var m in upit2)
                        {
                            m.mjestoid = person4Change.CityKey;
                            m.ziroRacun = person4Change.Account;
                            m.adresa = person4Change.Street;
                            m.email = person4Change.EMail;
                        }
                        ctx1.SubmitChanges();
                        var upit3 = from s in ctx1.korisnik where s.id == korisnik_id1 select s;
                        foreach(var m in upit3)
                        {
                            m.kontaktid = kontakt_id1;
                            m.ime = person4Change.Name;
                            m.prezime = person4Change.Surname;
                            if (person4Change.Role == true)
                            {
                                m.uloga = 0;
                            }
                            else
                            {
                                m.uloga = 1;
                            }
                        }
                        ctx1.SubmitChanges();
                    }
                    else
                    {
                        var upit2 = from s in ctx1.kontakt where s.id == kontakt_id1 select s;
                        foreach (var m in upit2)
                        {
                            m.mjestoid = person4Change.CityKey;
                            m.ziroRacun = person4Change.Account;
                            m.adresa = person4Change.Street;
                            m.email = person4Change.EMail;
                        }
                        ctx1.SubmitChanges();
                        var upit3 = from s in ctx1.korisnik where s.id == korisnik_id1 select s;
                        foreach (var m in upit3)
                        {
                            m.kontaktid = kontakt_id1;
                            m.ime = person4Change.Name;
                            m.prezime = person4Change.Surname;
                            m.userName = person4Change.UserName;
                            m.password = person4Change.PasswordHash;
                            if (person4Change.Role == true)
                            {
                                m.uloga = 0;
                            }
                            else
                            {
                                m.uloga = 1;
                            }
                        }
                        ctx1.SubmitChanges();
                    }
                    ConnectionPool.checkInConnection(kon);
                }
                catch (MySqlException ex)
                {
                    MessageBox.Show("Nije moguce povezati se sa bazom podataka. Program ce se zavrsiti. Detalji: " + ex.Message, "Problem u ucitavanju baze podataka", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    this.Close();
                }
                finally
                { }
            }
            refresuj();
        }

        private void Form1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.F1)
            {
                try
                {
                    Process.Start(new ProcessStartInfo(Environment.CurrentDirectory + "\\help\\autostarpomoc.chm"));
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Dogodila se greska pri pokusaju ucitavanja datoteke pomoci. Ukoliko program radi u Win7+ okruzenju potrebno je da u Registry Editoru promjenite polja za podrsku *.chm datotekama.\nDetalji: " + ex.Message, "Sistemska greska", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
        #endregion


    }
}
